package cn.itsource.basic.controller;

import cn.itsource.basic.util.AjaxResult;
import cn.itsource.basic.util.FastDfsUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

//                                      文件上传的接口

/**
 * 上传:要写---调用的工具类--Post
 *      前端：type="file" mutipart/form-data   文件上传项
 *      后端：Multipart对象-@RequestPart
 *
 * 删除:要写---调用的工具类--Delete
 *      前端：/dept./add?path=/group1/M00/00/00/wKgZhVkMP4KAZEy-AAA-tCf93Fo973.jpg
 *      后端：@RequestPParam
 *
 * 下载 = 不需要
 * 查询 = 路径
 *
 * 更新 = 删除 + 上传
 */
@RestController
@RequestMapping("/fastDfs")
public class FastDfsController {

    //@RequestPart对复杂表单项的处理
    /**
     * 上传接口：
     * 要使用elementUi提供的上传组件 而组件默认name="file",与上传文件的name属性值一致
     * @param file
     * @return
     */
    @PostMapping
    public AjaxResult upload(@RequestPart("file") MultipartFile file){

        try {
            System.out.println(file.getOriginalFilename() + ":" + file.getSize());
            //获取原始的文件名
            String oName = file.getOriginalFilename();
            // xxx.jpg             截取到末尾 最后一个位置 要+1 因为含头不含尾
            String extName = oName.substring(oName.lastIndexOf(".")+1);//获取的就是jpg

            //上传成功之后返回的文件名
            String fileName =  FastDfsUtils.upload(file.getBytes(), extName);
            System.out.println(file.getBytes());
            System.out.println(extName);

            //如果成功，将文件名设置到AjaxResult并返回给前端
            return AjaxResult.me().setResultObj(fileName);
        } catch (IOException e) {
            e.printStackTrace();
            return AjaxResult.me().setSuccess(false).setMessage("上传失败!"+e.getMessage());
        }
    }

    //删除
    @DeleteMapping
    public AjaxResult delete(@RequestParam("path") String path){
        try {
            //接受前端发送的文件路径path
            //把路径中 group1前面那个/去掉          /group1/M00/00/00/wKgZhVkMP4KAZEy-AAA-tCf93Fo973.jpg
            String pathTmp = path.substring(1); // goup1/xxxxx/yyyy
            //截取 首先得到第一个/的索引--即group1后面的/   然后从0到这个/截取 含头不含尾 因此截取到group1
            String groupName =  pathTmp.substring(0, pathTmp.indexOf("/")); //group1
            String remotePath = pathTmp.substring(pathTmp.indexOf("/")+1);// /xxxxx/yyyy
            System.out.println(groupName);
            System.out.println(remotePath);
            //执行删除操作 需要两个参数，一个
            FastDfsUtils.delete(groupName, remotePath);
            //返回成功的结果集
            return  AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().setSuccess(false).setMessage("删除失败!"+e.getMessage());
        }
    }
}